package io;

import java.io.*;

/**
 * @author weim
 * @date 18-8-28
 */
public class MyFile {

        public static void main(String[] args) throws IOException {



            //定义目录
            File myFile = new File("/tmp/weim");
            File myFile1 = new File("/tmp/weim/tmp");
            //System.out.println(myFile.exists());
            //判断目录是否存在  不存在则创建
//            mkdirs()  循环创建
            if(!myFile.exists()){
                myFile.mkdir();
            }
            if(!myFile1.exists()){
                myFile1.mkdir();
            }

            //System.out.println(myFile.createNewFile());
            //System.out.println(myFile1.createNewFile());
            File[] temp = new File[5];
            for(int i=0; i<5; i++){
                //创建5个文件，文件内容为空
                //文件名字    = prefix(长度大于3) + 随机数 + suffix(null 时  是tmp);
                temp[i] =  File.createTempFile("aaa", ".txt", myFile);
                //System.out.println(temp[i].getName());
            }
            for(int i=0; i<5; i++){
                //创建5个文件，文件内容为空
                //文件名字    = prefix(长度大于3) + 随机数 + suffix(null 时  是tmp);
                temp[i] =  File.createTempFile("bbb", ".txt", myFile1);
                //System.out.println(temp[i].getName());
            }

            //获取该路径下所有的文件名
            //Lambda表达式
            //list(FilenameFilter filter);
            //实现filter的accept(File dir, String name)接口方法
            String [] aStrings = myFile.list((dir,name) -> name.startsWith("aaa7"));

            //获取该路径下所有的文件
            File[] aFiles = myFile.listFiles();
            //fileList(aFiles);
            //fileDel(aFiles);

            File copyFile = new File("/tmp/weim/copy");
            copyFile.delete();
            if(!copyFile.exists()){
                copyFile.mkdir();
            }

            fileCopy(aFiles,copyFile);
            //目录在程序运行结束时删除
            //当目录下有文件时，删除不了
            //myFile.deleteOnExit();
            //myFile.delete();
            //myFile1.deleteOnExit();
        }

        //递归查找所有目录以及文件
        public static void fileList(File[] aFiles){
            for(File atemp : aFiles){
                if(atemp.isFile()){
                    System.out.println(atemp.getAbsolutePath());
                }
                if(atemp.isDirectory()){
                    fileList(atemp.listFiles());
                }
            }
        }
        //递归删除所有目录以及文件
        public static void fileDel(File[] aFiles){
            for(File atemp : aFiles){
                if(atemp.isFile()){
                    //删除文件
                    atemp.delete();
                }
                if(atemp.isDirectory()){
                    fileDel(atemp.listFiles());
                }
                //文件删除完之后，删除目录
                atemp.delete();
            }
        }

        //递归复制所有目录以及文件
        public static void fileCopy(File[] aFiles,File directory) throws IOException{

            for(File atemp : aFiles){
                if(atemp.isFile()){
                    //System.out.println(atemp.getAbsolutePath());
                    InputStream inputStream = new FileInputStream(atemp);

                    String fileName = directory.getPath() + "/" + atemp.getName();

                    OutputStream outputStream = new FileOutputStream(fileName);
                    byte[] buf = new byte[512];
                    while(inputStream.read(buf) > 0){
                        outputStream.write(buf);
                    }
                    outputStream.flush();
                    outputStream.close();
                    inputStream.close();
                }
                if(atemp.isDirectory()){
                    //fileList(atemp.listFiles());
                    String directoryName = directory.getPath() + "/" + atemp.getName();
                    //创建子目录
                    directory = new File(directoryName);
                    if(!directory.exists()){
                        directory.mkdir();
                    }
                    fileCopy(atemp.listFiles(),directory);
                }
            }
        }

}
